AWSの各種ログを可視化するOSSのSIEMソリューション「SIEM on Amazon ES」がAWSから公開されたのでCloudTrailログを可視化してみた
こんにちは、臼田です。
みなさん、AWSのセキュリティログの可視化してますか?(挨拶
今回はAWSからOSSとして提供されたSIEMソリューションである「SIEM on Amazon ES」の概要を確認しつつCloudTrailの可視化をしてみたいと思います!
AWSのリリースは以下を参照してください。
AWS サービスのログの可視化やセキュリティ分析を実現する SIEM on Amazon Elasticsearch Service 公開のお知らせ | Amazon Web Services ブログ
SIEM on Amazon ESとは
まずはこいつを見てくれ(公式ブログから引用)
すごく…いい感じです…
これはSIEM on Amazon ESで可視化したCloudTrailのログです。この仕組が簡単に作れることがこのソリューションの魅力の一つです。ただこれだけにはとどまりません。特徴をいくつか上げていきます。
- 様々なAWSサービスのログ取り込みに対応
- 現状(2020/10/28)サポートされているログ
- AWS CloudTrail
- Amazon Virtual Private Cloud (Amazon VPC) Flow Logs
- Amazon GuardDuty
- AWS WAF
- Elastic Load Balancing
- Amazon CloudFront
- Amazon Simple Storage Service (Amazon S3)
- Amazon Route 53 Resolver
- 各種ログが適切に正規化されている
- マネージドサービスとサーバーレスの仕組みで作られていて運用が楽
- マルチリージョン・マルチアカウントのログ取り込みが可能
僕としてはマルチリージョン・マルチアカウントで利用できるのは非常に魅力的です。これが簡単に利用できることが素晴らしいですね!
アーキテクチャを見てみましょう。(公式ブログから引用)
図の中央付近にあるCentralized Log Bucketにログを集めることによっていい感じにLambdaで正規化してAmazon ESに取り込んでくれるようになっています。
とりあえずS3に入れれば、というところがマルチリージョン・マルチアカウントを実現するポイントですね。Kinesis Data FirehoseでもS3 ExportでもReplicationでもなんでもOKということです。
正規化もソリューション側でやってくれるのでユーザ側で頑張らなくていいところが嬉しいです。
デフォルトではダッシュボードは以下が用意されています。
- CloudTrail
- VPC Flow Logs
- GuardDuty
- AWS WAF
- CloudFront
- All - Threat Hunting
ダッシュボードがどんな感じで見れるのかはGitHubに置いてあるのでこちらをご確認ください。
初期構築とCloudTrailの可視化をやってみた
それでは作っていきましょう。
セットアップの方法は大きく2種類あり、デフォルトで提供されているCloudFormationテンプレートを利用する方法と、CDK(AWS Cloud Development Kit)を利用する方法です。
今回は手っ取り早くやるために前者の方法で実施します。
注意点としてはデフォルトではt3.small.elasticsearchインスタンスのため負荷が上がるような場合には調整が必要であったりします。そのような場合にはCDKでセットアップしましょう。
詳細なセットアップ手順はこちらにあります。
デプロイ
まず最初にオプション手順ですが、AWS環境の前にGeoLite2に登録します。GeoLite2はフリーでGeoIPのデータベースを提供しているサイトです。ロケーション情報は分析する上で重要なので、この作業の実施を推奨します。こちらの手順を参考にしました。
まずライセンスを確認し、合意したらサインアップを開きます。必要情報を入力してContinue
します。
メールが届くのでそこからリンクを開き、パスワードを設定したらログインします。
ログインしたら左メニューのMy License Key
を開きGenerate new license key
を押します。
適当な名前を入れ、GeoIP UpdateのチェックはNo
を選んでConfirm
します。
License keyが発行されるのでコピーします。この画面から遷移したらkeyを確認できなくなるので気をつけましょう。
GeoLite2のLicense keyを取得したらAWS環境のセットアップです。セットアップ手順にあるCloudFormationテンプレートをLaunch stack
ボタンから開きます。今回はTokyo (ap-northeast-1)のテンプレートを利用します。
CloudFormationの画面が開くのでそのまま次へ進みます。
スタックの詳細では各パラメータを入力します。
- AllowedSourceIpAddresses: Amazon ESへのアクセスを許可する送信元IPのリストをスペース区切りで入力
- GeoLite2LicenseKey: 先程作成したkey
- SnsEmail: アラート送信先のメールアドレス
20分程するとセットアップが完了します。SNSのSubscription Confirmationメールが飛んでいますのでConfirmしておきましょう。
完了後、CloudFormationのスタック詳細の出力からKibanaUrlにあるURLを開きます。KibanaAdminとKibanaPasswordもすぐに使うので控えましょう。
Kibanaのログイン画面が出ますので先程のKibanaAdminとKibanaPasswordでログインします。
最初にパスワード変更が推奨されています。左側のAccountメニューから変更します。
続いてDashboard等の設定をインポートします。こちらのリンクから辿れるZipファイルをダウンロードして解凍します。Kibanaの左メニューから「Management -> Saved Objects -> Import」と開きます。
ファイルを選択するところで解凍したフォルダにあるdashboard_v770.ndjson
を選択してImportします。
これでベースのセットアップは完了です。
CloudTrailのログを取り込む
既存のログを取り込む方法も公開されていますが、今回は新規でログを取り込む設定を行ってみます。 各種ログ取り込みの設定方法はこちらにあります。
CloudTrailの画面から新規の証跡を作成します。
証跡名は適当に、保存するバケットは既存を選択し、今回のソリューションで作成されたaes-siem-123456789012-log
(AWSアカウント名は環境毎のもの)というバケットを選択します。暗号化も重要で、SSE-KMSを有効としAWS KMS エイリアスをaes-siem-key
とします。次へ進みます。
ログイベントはデフォルトでも大丈夫です。データイベントも分析したい場合にはここで有効化します。
これでCloudTrailの取り込み設定ができました。
可視化する
CloudTrailのログが取り込まれてしばらくすると、Kibanaの左メニューDashboardからダッシュボードが選択できるようになります。(少し気長に待って画面リロードとかしてると見れるようになります)
一覧からCloudTrail Summary
を選択します。
いい感じに出ました!アカウントやリージョン毎のデータ量、送信元IPのランキングなどが出てきました。Geoでは日本が赤くなっていてリクエストが多いことが確認できます。
次に主要な重要なイベントのカウント一覧です。ログイン失敗やAPI失敗の数、VPC周りやS3の設定変更があげられています。
下の方に行くとイベント名/イベントタイプ/エラーコード毎の円グラフや時系列データがありました。
CloudTrailのログだけを見る時は、このダッシュボードで用意されているような重要なイベントを可視化して、不正なログインが発生していないか、定常的なラインがどれくらいなのかなどを見ていくことになります。
まとめ
AWSから新しくOSSとして公開されたSIEM on Amazon ESを使ってみました。
これまで公式からこのようなものが提供されていなかったので個別にAmazon ESやサードパーティのSIEM製品などを利用しないと辛いことが多かったです。
今回CloudTrailに限らずGuardDutyやELB、CloudFrontなども取り込めてかつ適切に正規化された状態で、マルチリージョン・マルチアカウントで利用できるようになったため、AWS上でも比較的簡単に高度なログの可視化やセキュリティ分析が捗るのではないでしょうか?
OSSなのでこれからどんどん良くなっていくことが期待できたり、いい感じのダッシュボードを作ったらコミットしたりもできると思います。
ぜひ使っていきましょう!